package others.swing.p012;

import java.awt.*;  //加载图形界面设计要用的抽象 窗口工具包
import java.awt.event.*;//加载图形界面下响应事件的包
import javax.swing.*;//加载图形界面设计要用的swing包
import java.sql.*;

/**
 * 学生宿舍管理系统-版本二
 * 博客地址：https://blog.csdn.net/WeiHao0240/article/details/121356761
 */
public class MyWindow {
    public static void main(String args[]) {
        new MainWindow();
    }
}

//定义一个继承Fram窗口类的MainWindow 类实现ActionListener,ItemListener接口
class MainWindow extends Frame implements ActionListener, ItemListener {
    int i;
    static String user = null;
    Box baseBox, box1, box2;
    CheckboxGroup chose;//定义一个选择框
    Panel p1, p2;//定义一个面板作为容器
    Label introduce, namelabel, pwdlabel;//定义三个标签
    TextField nametextField, pwdtextField;//定义两个文本框
    Checkbox managerbox, teacherbox, studentbox;  //定义三个选择框
    Button yesbutton, nobutton;//定义两个按钮
    Image myImage;//定义一个图像

    MainWindow() {
        super("学生宿舍信息管理系统!");//设置窗体标题
        this.setFont(new Font("隶书", Font.BOLD, 20));//设置界面的字体
        this.setBackground(Color.pink);  //设置界面背景颜色
        chose = new CheckboxGroup();
        p1 = new Panel();  //初始化面板
        p2 = new Panel();
        introduce = new Label("欢迎进入学生宿舍管理系统！");
        //初始化两个标签，用于提示字符信息
        namelabel = new Label("登  录  名：  ");
        pwdlabel = new Label("密       码：  ");
        //初始化两个文本框的显示宽度
        nametextField = new TextField(12);
        pwdtextField = new TextField(12);
        pwdtextField.setEchoChar('*');
        //初始化选择框
        managerbox = new Checkbox("管理员", false, chose);
        teacherbox = new Checkbox("教师", true, chose);
        studentbox = new Checkbox("学生", false, chose);
        //初始化两个按钮
        yesbutton = new Button("登陆");
        nobutton = new Button("退出");

        myImage = new ImageIcon("宿舍.jpg").getImage();//要显示的图片文件

        p1.add(introduce);// 将界面说明的标签加入面板
        //将各个标签，按钮，按照需要加入box1中
        box1 = Box.createVerticalBox();
        box1.add(namelabel);
        box1.add(Box.createVerticalStrut(8));
        box1.add(pwdlabel);
        box1.add(Box.createVerticalStrut(8));
        box1.add(managerbox);
        box1.add(Box.createVerticalStrut(8));
        box1.add(yesbutton);
        yesbutton.setBounds(12, 12, 12, 12);

        //将各个标签，按钮，按照需要加入box2中
        box2 = Box.createVerticalBox();
        box2.add(nametextField);
        box2.add(Box.createVerticalStrut(8));
        box2.add(pwdtextField);
        box2.add(Box.createVerticalStrut(8));
        box2.add(p2);
        box2.add(Box.createVerticalStrut(8));
        box2.add(nobutton);
        nobutton.setBounds(12, 12, 12, 12);

        p2.add(teacherbox);
        p2.add(Box.createHorizontalStrut(15));
        p2.add(studentbox);

        //将box1,box2加入baseBox中
        baseBox = Box.createHorizontalBox();
        baseBox.add(box1);
        baseBox.add(Box.createHorizontalStrut(20));
        baseBox.add(box2);

        setLayout(new FlowLayout());  //设置窗体上的各控件的布局为流式布局
        add(p1);//将面板加入界面
        add(baseBox);//将baseBox加入界面中
        //为输入文本框注册监听器对象
        nametextField.addActionListener(this);
        pwdtextField.addActionListener(this);
        //为选择框注册监听器对象
        managerbox.addItemListener(this);
        teacherbox.addItemListener(this);
        studentbox.addItemListener(this);
        //为按钮注册监听器对象
        yesbutton.addActionListener(this);
        nobutton.addActionListener(this);
        //采用匿名类实现窗体标题栏上“×”按钮的关闭功能
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent ew) {
                dispose();   //关闭窗口并释放所占屏幕资源
            }
        });

        setBounds(100, 100, 450, 500);//设置窗体的起始坐标，以及宽度和高度
        setVisible(true);  //让窗体可见
        setResizable(false);//让窗体不可修改
    }

    //插入一个图片
    public void paint(Graphics g) {
        g.drawImage(myImage, 70, 250, this);//图片的位置属性
    }

    //用户身份控件响应
    @Override
    public void itemStateChanged(ItemEvent ei) {
        if (managerbox.getState()) {
            i = 1;
        } else if (teacherbox.getState()) {
            i = 0;
        } else if (studentbox.getState()) {
            i = -1;
        }
    }

    @Override
    public void actionPerformed(ActionEvent ea) {
        //连接数据库
        Connection con;
        Statement sql;
        ResultSet rs;
        try {
            Class.forName("s un.jdbc.odbc.JdbcOdbcDriver");   //加载驱动
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if (ea.getSource() == yesbutton) {
            try {
                //数据源：dormitory2   用户名：空  密码：空
                con = DriverManager.getConnection("jdbc:odbc:dormitory2", " ", " ");
                sql = con.createStatement();
                rs = sql.executeQuery("SELECT * FROM Users");
                String pwd, type;
                user = nametextField.getText();
                String id = "";
                boolean result = false;
                while (rs.next()) {
                    user = rs.getString(1);
                    pwd = rs.getString(2);
                    type = rs.getString(3);

                    //选择用户身份
                    if (i == 1) {
                        id = "管理员";
                    } else if (i == 0) {
                        id = "教师";
                    } else if (i == -1) {
                        id = "学生";
                    }
                    //输入用户姓名和对应密码，与数据表Users比较
                    if ((nametextField.getText()).equals(user) && (pwdtextField.getText()).equals(pwd) && id.equals(type)) {
                        result = true;
                        if (i == 1) {
                            Manager f1 = new Manager();//登录管理员操作界面
                        } else if (i == 0) {
                            Teacher f2 = new Teacher();//登录教师操作界面
                        } else if (i == -1) {
                            Student f3 = new Student();//登录学生操作界面
                        }
                    }
                }
                //数据表Users中不存在该用户名
                if (!result) {
                    JOptionPane.showMessageDialog(this, "此" + id + "用户不存在！请检查并重新输入！", "友情提示", JOptionPane.WARNING_MESSAGE);
                }
                con.close();//关闭数据库
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //退出
        else if (ea.getSource() == nobutton) {
            dispose();
        }
    }
}